LANS - LANguard Scripting


What is LANS ?

LANS is a scripting language for LANguard Network Security Scanner.
It has been designed for writing security checks to be used in the Alerts module.
It includes an editor with syntax highlighting capabilities and a debugger.

LANS syntax

Comments

Comments are prefixed with # character. Anything after # is ignored by the interpreter.

i = 1 # this is a comment
# another comment

Variables

Variables must be declared before use.
Currently, LANS has two variable types : string and integer.
Multiple variables can be declared on a single line.

string	  str1, str2
integer	  i1,i2,j
Warning : Variables cannot be initialized when they are declared.
This is not correct :
string	  str1 = "test"  !!! incorrect
Numbers can be specified in decimal or hexadecimal base.
Hexadecimal numbers must be prefixed with $.
C like hexadecimal declaration (0x) is not supported.
integer	  i1,i2,j

i1 = 100
i2 = $3f
j = 0x3f  !!! incorrect
String variables must be double quoted.
string	 str1, bad

str1 = "a sample string"
bad = 'some string'  !!! incorrect
String variables can also be initialized with this notation :
stringVar = {hexnumber1, hexnumber2, hexnumber3, ... }
string stringVar

stringVar = {$41, $42, $43} # "ABC"
# you could also do this :
stringVar = stringVar + "DEF" + {$13, $10} # "ABCDEF" + end_of_line
String variables can be indexed.
Therefore, stringVar[1] returns the first character from string variable stringVar.
string stringVar

stringVar = "ABC"
echo(stringVar[1])

A

Lines

Long expressions can be split on several lines using this operator : \

string get_names

get_names = \
{$01, $f8, $00, $10, $00, $01, $00, $00, $00, $00,\
 $00, $00, $20, $43, $4B, $41, $41, $41, $41, $41,\
 $41, $41, $41, $41, $41, $41, $41, $41, $41, $41,\
 $41, $41, $41, $41, $41, $41, $41, $41, $41, $41,\
 $41, $41, $41, $41, $41, $00, $00, $21, $00, $01}

Operators

The following operators are supported under LANS :

Arithmetic and boolean operators
Operator | Operation | Operand types
+ | addition | integer, string
- | substraction | integer
* | multiplication | integer
/ | division | integer
& | and | integer
| | or | integer
^ | xor | integer
>> | shr - shift right | integer
<< | shl - shift left | integer
Relational operators
Operator | Operation | Operand types
= | equal | integer, string
> | greater than | integer
< | less than | integer
>= | greater than or equal | integer
<= | less than or equal | integer
<> | inequal | integer, string

If statements

Format :

if expression
statement1
statement2
...
[else expression
statement1
statement2
...]
end if

if size > 0
   echo("size is greater than 0")
else
   echo("size equal with 0")
else if

While statements

Format :

while expression
statement1
statement2
...
end while

i = 1
while i < 10
   i = i + 1
end while

Using LANS scripts with Alerts module

When a LANS script gets executed from LANguard Network Security Scanner the string variable _ip is set with the IP address of curently scanned computer.
Another important variable is the integer variable _return. This should be set before the end of the script. The value of this variable determines if the check was successful or not. (1=success. 0=failure)

For a detalied example, check First LANS script.

Default variables

Important varibles

Variable | Description
_ip | Contains the IP address of the currently scanned computer
_return | Should be set to 1 if the check is successful, 0 otherwise

Less important variables

Variable | Description
_eol | End of line. Equal to CR+LF.
_hostname | Contains the hostname of the currently scanned computer

ToDo

  • Increase the interaction between LANS and LANguard Network Security Scanner
    (e.g. alowing LANS scripts to interact directly with the scanning window such as add/modify/delete fields, status bar, ...)
  • Add the capability to forge IP packets and a nice packet editor

Credits

  • TSynEdit (http://synedit.sourceforge.net)
  • TRegExpr - Author: Andrey V. Sorokin

Copyright © 2001-2002 GFI Software Ltd.
Report suggestions/problems to bogdan@languard.com.


LANS - LANguard Scripting - second draft

First LANS script

Define a new alert

This tutorial will demonstrate how to write a simple security check using LANS.
We will create a security alert for checking this bug:
"Solaris Fingerd Discloses Complete User List"
There is a bug in the finger service, which will make it display the list of accounts, when this request is issued:

finger "a b c d e f g h"@solaris_host
Ok, let's start.
First we need to create a new alert. Let's click "Edit alerts" button from toolbar.

Next, we must select the category where the alert will be located.
Select Miscellaneous and the list of alerts from this category will be displayed.
We need to create a new alert here so let's select "New alert" from the file menu.
The following window should be displayed.

Let's fill in the following fields.

1. Alert name : Solaris Fingerd Discloses Complete User List (sample)
2. Impact : Sensitive information disclosure
3. BugtraqID/URL : http://www.securiteam.com/unixfocus/6B00M0U2UW.html
(this URL contains more information regarding this bug)
4. Checks : We will add three checks.
  • I) Operating system is Solaris,SunOS
  • II) TCP port 79 (finger) is open
  • III) A LANS script for checking the bug
We will concentrate on the third check. (LANS script)

Click on "Open script in LANS" to start writing the code.
LANS editor will show up. This is what we want to do :

The script

1.# Solaris finger bug '@a b c d e f g h'
2.string	request, data, fdata
3.integer	sock

4.#_ip = "192.168.8.10"

5._return = 0
6.echo("ip= " +_ip,_color_green)

7.request = "a b c d e f g h" + _eol
8.sock = open_tcp(_ip, 79)

9. if sock > 0
10.   send(sock, request)
11.   fdata = ""
12.   data = "1"
13.   while length(data) > 0
14.    data = recv(sock, 256)
15.    fdata = fdata + data
16.   end while
17.   echo(fdata)

18.   if pos("nobody", fdata) > 0
19.    _return = 1
20.   end if

21. end if

How this script works ?

Now, let's try to explain this script :

1.# Solaris finger bug '@a b c d e f g h'
This line is a commentary describing the script purpose.
Observe the # character prefixing the actual text.
This character is used for describing comments.
2.string    request, data, fdata
3.integer   sock
The next two lines are used for declaring variables to be used in the script.
We declare three string variables request, data, fdata and one integer variable sock.
  • sock will contain the socket handle
  • request will contain the finger request data to be sent
  • data will be used as a temporary buffer
  • fdata will contain the response from server
4.#_ip = "192.168.8.10"
Default variable _ip is initialized with a custom value "192.168.8.10".
This line will be commented in final version but it's useful during script development and testing.
5._return = 0
Default variable _return is initialized with 0/false (for now).
_return variable will contain the check result.
(true - the check was succesful or false - the check failed)
6.echo("ip= " +_ip,_color_green)
Just for testing.
Will display the current IP address with green color.
7.request = "a b c d e f g h" + _eol
Initialize the string variable _request.
Observe the _eol (end of line) variable : it is used as a replacement for \r\n.
_eol = chr(13)+chr(10
8.sock = open_tcp(_ip, 79)
Initialize a TCP connection on port 79 (finger).
Returns a handler to recently created socket or zero if the connection could not be established.

Ok, here we have two different situations :
1.The connection is established
2.The connection could not be established

Therefor we must use a conditional statement (if).
We are only interested on first case (the connection is established).We write :
9. if sock > 0
    ...
21. end if
We check to see if we have a valid socket handle.
If we do :
10.send(sock, request)
Send our request to the finger service.
11. fdata = ""
12. data = "1"
13. while length(data) > 0
14.   data = recv(sock, 256)
15.   fdata = fdata + data
16. end while
Read the response from the finger service.
We use a temporary buffer data.(we read 256 characters at once)
We keep reading until the data variable will be empty (nothing more to read).
The complete response will be contained in the fdata variable.
17. echo(fdata)
Display the response. Should contain interesting information.
18.  if pos("nobody", fdata) > 0
19.   _return = 1
20.  end if
We have the finger response.
Now we have to check if it contains valid information.
A list of users should contain the nobody account.
So, we check to see if it's contained inside the response.
We are using the pos function for this task. If the magic word is found then we have a vulnerable computer.
We instruct LANguard Network Security Scanner to mark our check as successful by setting the _return variable to 1/true.

Save the script in the same directory with the alert file "Alerts\Miscellaneus" and we are done.

Sample output (slightly modified)
Login	    Name	       TTY	   Idle    When    Where
root	 Super-User	       pts/3	     hostname1
daemon		???			    < .  .  .  . >
bin		???			    < .  .  .  . >
sys		???			    < .  .  .  . >
adm	 Admin		       pts/4	     hostname2
lp	 Line Printer Admin		    < .  .  .  . >
uucp	 uucp Admin			    < .  .  .  . >
nuucp	 uucp Admin			    < .  .  .  . >
listen	 Network Admin			    < .  .  .  . >
nobody	 Nobody 			    < .  .  .  . >
noaccess No Access User 		    < .  .  .  . >
nobody4  SunOS 4.x Nobody		    < .  .  .  . >
smb	 SMB guest account		    < .  .  .  . >
...
...

Copyright © 2001-2002 GFI Software Ltd.
Report suggestions/problems to bogdan@languard.com.


Function Open_tcp

Open a TCP connection with a remote computer.

Usage

integer open_tcp (string ip, string port)

Remarks

Returns a handler to recently created socket or zero if the connection could not be established.

Example

integer  sock

sock = open_tcp("192.168.8.10", "80")
if sock > 0
   echo("port 80 is open")
else
   echo("port 80 is closed")
end if

port 80 is closed

See Also

Close, Send, Recv


Function Open_udp

Open a UDP socket for sending datagrams.

Usage

integer open_udp ()

Example

integer  sock

sock = open_udp()
if sock > 0
   echo("UDP socket is open.")
   close(sock)
end if

UDP socket is open.

See Also

Close, SendTo, RecvFrom


Function Close

Close a socket. Can be used for either TCP or UDP sockets.

Usage

close (integer sock)

Example

integer  sock

sock = open_tcp("192.168.8.10", "80")
if sock > 0
   echo("port 80 is open")
   close(sock)
else
   echo("port 80 is closed")
end if

port 80 is open

See Also

Open_tcp


Function Recv

Receive data through socket. (TCP sockets)

Usage

string recv (integer socket, integer size)

Remarks

In case no data is received through socket, the function will timeout and return a null string.

Example

integer  sock
string   data

sock = open_tcp("192.168.8.10", "13")
if sock > 0
   echo("port 13 (daytime) is open")
   data = recv(sock, 1024) # receive maximum 1024 bytes
   if length(data) > 0
      echo(inttostr(length(data)) + " bytes received : " + data)
   else
      echo("no data")
   end if
   close(sock)
else
   echo("port 13 (daytime) is closed")
end if

port 13 (daytime) is open
20 bytes received : 8:27:57 PM 1/7/2002

See Also

Send


Function Send

Send data through socket. (TCP sockets)

Usage

integer send (integer socket, string data [, integer size])

Remarks

If size paramater is not specified, the whole string will be sent.

Example

integer  sock, sent
string   data

data = "some data"
sock = open_tcp("192.168.8.10", "7")
if sock > 0
   echo("port 7 (echo) is open")
   sent = send(sock, data)
   echo(inttostr(sent) + " bytes sent.")
   close(sock)
else
   echo("port 7 (echo) is closed")
end if

port 7 (echo) is open
9 bytes sent.

See Also

Recv


Function RecvFrom

Receive data through socket. (UDP sockets)

Usage

string recvfrom (integer socket, integer size)

Remarks

In case no data is received through socket, the function will timeout and return a null string.

Example

integer  udp_sock
string   data

# open udp socket
udp_sock = open_udp()
if udp_sock > 0
   sendto(udp_sock, "192.168.8.10", "13", "");
   echo("now receiving ...")

   data = recvfrom(udp_sock, 1024) # receive maximum 1024 bytes
   if length(data) > 0
      echo(inttostr(length(data)) + " bytes received : " + data)
   else
      echo("no data")
   end if

   close(udp_sock)
else
   echo("unable to create the udp socket")
end if

now receiving ...
20 bytes received : 8:43:11 PM 1/7/2002

See Also

SendTo


Function SendTo

Send data through socket. (UDP sockets)

Usage

integer sendto (integer socket, string ip, string port, string data [, integer size])

Remarks

If size paramater is not specified, the whole string will be sent.

Example

integer  udp_sock, sent
string   data

data = "some data"
udp_sock = open_udp()
if udp_sock > 0
   echo("sending data through socket")
   sent = sendto(udp_sock, "192.168.8.10", "7", data)
   echo(inttostr(sent) + " bytes sent.")
   close(udp_sock)
else
   echo("unable to create the socket.")
end if

sending data through socket
9 bytes sent.

See Also

RecvFrom


Function DnsLookup

Resolve a hostname to coresponding IP address.

Usage

string dnslookup (string hostname)

Remarks

If hostname cannot be resolved, a null string is returned.

Example

# DNS functions test
string	  hostname, ip

hostname = "trinity" # my desktop computer
ip = dnslookup(hostname)

if ip <> ""
   echo("hostname : " + hostname)
   echo("resolved as : " + ip, _color_blue)

   # now backwards :)
   hostname = ReverseDnsLookup(ip)
   if hostname <> ""
      echo("back to : " + hostname,)
   end if
else
   echo("unable to resolve " + hostname + " !", \
    _color_red)
end if

hostname : trinity
resolved as : 192.168.8.10
back to : TRINITY

See Also

ReverseDnsLookup


Function ReverseDnsLookup

Resolve an IP address to corresponding hostname.

Usage

string ReverseDnsLookup (string ip)

Remarks

If IP address cannot be resolved, a null string is returned.

Example

# DNS functions test
string	  hostname, ip

hostname = "trinity" # my desktop computer
ip = dnslookup(hostname)

if ip <> ""
   echo("hostname : " + hostname)
   echo("resolved as : " + ip, _color_blue)

   # now backwards :)
   hostname = ReverseDnsLookup(ip)
   if hostname <> ""
      echo("back to : " + hostname,)
   end if
else
   echo("unable to resolve " + hostname + " !", \
    _color_red)
end if

hostname : trinity
resolved as : 192.168.8.10
back to : TRINITY

See Also

DnsLookup


Function Whois

Perform a whois query.

Usage

string whois (string query, [string whois_server, [string port]])

Remarks

If no whois server is specified, LANS will try to find a valid server from your query string.
This may or may not work.

Example

# whois function test
string query, server, data

# whois server (my test whois server)
server = "163.242.244.228"
# query for bogdan
query = "bogdan"

# perform the query
data = whois(query, server)

# display the response (if valid)
if length(data) > 0
   echo(data)
end if

SWHOISD 2.0
Searching for bogdan. Found 1 record(s) matching bogdan.

Person: 		 (Handle JD1-FOOBAR)
Name:			 Bogdan Calin
Email address:		 bogdan@languard.com
Address:		 6083 Foobar Ave., San Diego, CA 92121
Country:		 US
Telephone:		 858-853-1212
FAX No: 		 858-555-1977
Created:		 Sat Jun 23 01:57:22 PDT 2001
Last Updated:		 Sat Jun 23 01:57:22 PDT 2001

To single out one record,
look it up with "!XXX", where XXX is the handle

See Also

DnsLookup


Function SnmpGet

Wrapper for SNMP get request.
Returns the value for a specified OID (object id).
For more information, you should consult the sample script snmp_test.lans.

Usage

integer snmpget (string ip, string oid, string community_string, string string_variable)

Remarks

string_variable is the name of the variable that will receive the result.
This variable should be specified between brackets. (see example)

Example

# snmp functions test
string	ip
string	oid,res # object ids, results

ip  = "192.168.8.20"
oid = "1.3.6.1.2.1.1.1.0" # system Description

# perform snmpget
if snmpget(ip, oid, "public", "res") = 1
   # display the information (if valid)
   if length(res) > 0
      echo(oid + " = " + res)
   end if
end if

1.3.6.1.2.1.1.1.0 = Hardware: x86 Family 6 Model 11 Stepping 1 AT/AT COMPATIBLE
- Software: Windows 2000 Version 5.1 (Build 2600 Uniprocessor Free)

See Also

SnmpGetNext


Function SnmpGetNext

Wrapper for SNMP getnext request.
Returns the name for the next OID (object id).
For more information, you should consult the sample script snmp_test.lans.

Usage

integer snmpgetnext (string ip, string oid, string community_string, string string_variable)

Remarks

string_variable is the name of the variable that will receive the result.
This variable should be specified between brackets. (see example)

Example

# snmp functions test
string	ip
string	oid,res # object ids, results

ip  = "192.168.8.20"
oid = "1.3.6.1.2.1.1.1.0" # system Description

# perform snmpget
if snmpgetnext(ip, oid, "public", "res") = 1
   # display the information (if valid)
   if length(res) > 0
      echo("current oid : " + oid)
      echo("next oid is : " + res)
   end if
end if

current oid : 1.3.6.1.2.1.1.1.0
next oid is : 1.3.6.1.2.1.1.2.0

See Also

SnmpGet


Function SnmpSet

Wrapper for SNMP set request.
Set the value for a specified OID (object id).
For more information, you should consult the sample script snmpset_test.lans.

Usage

integer snmpset (string ip, string oid, string community_string, string value, integer valueType)

Remarks

value is the value to be set.
valueType is the value type.

Curently you can use only this types :
_snmp_string - for writing string values
_snmp_integer - for writing integer values

Example

# snmp functions test
# snmpset implementation in LANS
string  ip
string  oid, res # object id
string  read_comm, write_comm, value

read_comm  = "public"
write_comm = "private"
value      = "LANS was here"

ip  = dnsLookup("trinity")
# sysContact
oid = "1.3.6.1.2.1.1.4.0"

# let's check the current value
if snmpget(ip, oid, read_comm, "res") = 1
   # display the information (if valid)
   if length(res) > 0
      echo(oid + " = " + res)
   end if
end if

if length(res) > 0
 echo("trying to set ... ", _color_navy)
 # perform snmpset (before set)
 if snmpset(ip, oid, write_comm, value, _snmp_string) = 1
    echo("value was set (OK)", _color_blue)
 else
    echo("unable to set value", _color_red)
 end if

 # let's verify if the value was set
 if snmpget(ip, oid, read_comm, "res") = 1
    # display the information (if valid)
    if length(res) > 0
       echo(oid + " = " + res)
    end if
 end if
else
 echo("unable to read value", _color_red)
end if

1.3.6.1.2.1.1.4.0 = blade@trinity
trying to set ...
value was set (OK)
1.3.6.1.2.1.1.4.0 = LANS was here

See Also

SnmpGet


Function Echo

Display a text on debug window.
Optional a color could be used.

Usage

echo (string text, [integer color])

Remarks

Color could be one of the folowing :

  • _color_black
  • _color_red
  • _color_green
  • _color_blue
  • _color_purple
  • _color_silver
  • _color_yellow

    • Or could be specified as RGB pair : $1F11FF.

    Example

    string	text

text = "welcome"
# display text
echo(text)
# display text using red color
echo(text, _color_red)
# display text using $1F11FF color
echo(text, $1F11FF)

    welcome
welcome
welcome

    See Also

    Mid


Function Length

Returns the number of characters in a string.

Usage

integer length (string str)

Example

echo(length("Sample string"))

13

See Also

left


Function Pos

Returns the position of a substring within a string.

Usage

integer pos (string substring, string str)

Remarks

Returns the index value of the first character from substring or 0 if substring is not found.

Example

echo(pos("string", "Sample string"))

8

See Also

regexp


Function Left

Returns the first count number of character(s) from a string.

Usage

string left (string str, integer count)

Example

echo(left("Sample string", 6))

Sample

See Also

Right


Function Right

Returns the last characters from a string.

Usage

string right (string str, integer count)

Example

echo(right("Sample string", 6))

string

See Also

Left


Function Delete

Removes a substring from a string.

Usage

string delete (string string, integer index, integer count)

Example

string x

x = "how are you ?"
echo(x)

x = delete(x, 5,4)
echo(x, _color_red)

how are you ?
how you ?

See Also

Left


Function UpperCase

Returns a copy of a string in uppercase.

Usage

string uppercase (string str)

Example

echo(uppercase("cool"))

COOL

See Also

LowerCase


Function LowerCase

Returns a copy of a string in lowercase.

Usage

string lowercase (string str)

Example

echo(lowercase("COOL"))

cool

See Also

UpperCase


Function Ord

Returns the ordinal value for an character.

Usage

integer ord (String char)

Example

echo("ASCII code for 'a' : " + inttostr(ord("a")))

ASCII code for 'a' : 97

See Also

Chr


Function Dup

Returns a string equal with str_or_char duplicated n times.

Usage

string dup (string str_or_char, integer n)

Remarks

It is useful for testing buffer overflows.

Example

string test_dup

test_dup = dup("za", 10)
echo(test_dup)

zazazazazazazazazaza

See Also

Str


Function Chr

Returns the character for a specified ASCII value.

Usage

string chr (integer value)

Example

string	end_of_line

# compose EOL (end of line)
end_of_line = chr(13) + chr(10)
echo("cool" + end_of_line)

cool

See Also

Ord


Function Mid

Returns n characters from text starting with pos position.

Usage

string mid (string text, integer pos, integer n)

Example

string	test

test = "welcome"
echo(mid(test, 1, 3))

wel

See Also

Trim


Function Trim

Trims leading and trailing spaces and control characters from text.

Usage

string trim (string text)

Example

string 	before_trim, after_trim

before_trim = "  test string  "
echo("-" + before_trim + "-")

after_trim = trim(before_trim)
echo("-" + after_trim + "-")

-  test string  -
-test string-

See Also

Mid


Function StrToInt

Converts a string that represents an integer to a number.

Usage

integer strtoint (string str)

Example

string str

str = "150"
echo(strtoint(str) * 2)

300

See Also

IntToStr


Function IntToStr

Converts an integer to a string.

Usage

string inttostr (integer value)

Example

integer year

year = 2002
echo("Year : " + inttostr(year))

Year : 2002

See Also

StrToInt


Function IntToHex

Returns hexadecimal representation of an number.

Usage

string inttohex (integer number, integer number_of_digits)

Example

integer number
number = 255

echo(inttohex(number, 2))

FF

See Also

StrToInt


Function Base64Encode

Encode a string into Base64.

Usage

string base64encode (string input)

Example

# base64 test
string input

input = "how are you ?"
echo("Original string : " + input)

input = base64encode(input)
echo("Encoded : " + input, _color_blue)

input = base64decode(input)
echo("Decoded : " + input)

Original string : how are you ?
Encoded : aG93IGFyZSB5b3UgPw==
Decoded : how are you ?

See Also

Base64Decode


Function Base64Decode

Decode a Base64 encoded string.

Usage

string base64decode (string encoded_string)

Example

# base64 test
string input

input = "how are you ?"
echo("Original string : " + input)

input = base64encode(input)
echo("Encoded : " + input, _color_blue)

input = base64decode(input)
echo("Decoded : " + input)

Original string : how are you ?
Encoded : aG93IGFyZSB5b3UgPw==
Decoded : how are you ?

See Also

Base64Encode


Function RegistryRead

Read the contents of a specified key from registry. (local or remote)

Usage

integer registryRead (string computer, string reg_path, string reg_key, string string_variable)

Remarks

computer could be an IP address or a hostname.
LANS automatically prefixes the value of this variable with "\\" so you don't have to.

string_variable is the name of the variable that will receive the result.
This variable should be specified between brackets. (see example)

Example

# registry test
# read Internet Explorer version from registry
string	   ip, path, key, version

ip   = dnsLookup("freedom")
path = "SOFTWARE\Microsoft\Internet Explorer\Version Vector"
key  = "IE"

if  length(ip) > 0
    if registryRead(ip, path, key, "version") > 0
       echo("Internet Explorer version : " \
       + version, _color_blue)
    end if
end if

Internet Explorer version : 6.0000


Function RegExp

Evaluate a regular expression.

Usage

integer regexp (string regex, string text_to_evaluate)

Remarks

LANS is using the TRegExpr library written by Andrey V. Sorokin.
If you want to know more about TRegExpr you should go to http://anso.da.ru.

Example

# will match Solaris ftp servers with this versions:
# 2.6, 2.7, 2.8 and 5.6, 5.7, 5.8
regex = "FTP server \(SunOS (2|5)\.[678]\) ready"

text_to_match  = "220 mars FTP server (SunOS 5.7) ready."
if regexp(regex, text_to_match) = 1
   echo(text_to_match + " matched")
else
   echo(text_to_match + " not matched !")
end if

text_to_match  = "220 mars FTP server (SunOS 5.5) ready."
if regexp(regex, text_to_match) = 1
   echo(text_to_match + " matched")
else
   echo(text_to_match + " not matched !!!")
end if

220 mars FTP server (SunOS 5.7) ready. matched
220 mars FTP server (SunOS 5.5) ready. not matched !!!


Function Sleep

Suspend the execution of the current script for time milliseconds.

Usage

sleep (integer time)

Example

echo("wait a minute ...")
sleep(1000)

wait a minute ...


Function StatusBar

Display a message on status bar.

Usage

statusbar (string message)

Example

string	text

text = "welcome"
# display text
echo(text)
# display text on status bar
statusbar(text)

welcome

See Also

Echo


Procedure WriteToLog

Writes text to LANS log file (lans_log.txt).

Usage

writetolog (string text)

Example

string info
info = "Some information"

writetolog(info)

See Also

Echo